

package DAO;
import Pojo.Cliente;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ClienteDAO {

   private ArrayList<Cliente> listaCliente = new ArrayList<Cliente>();
   private static ClienteDAO instancia = null;
   /*metodo que recebe um cliente como paramentro e o adiciona em lista*/
   public void adicionar(Cliente novo){
        listaCliente.add(novo);
        Collections.sort(listaCliente);
   }
   public static synchronized ClienteDAO getInstacia(){
       if(instancia==null){
           instancia = new ClienteDAO();
       }
       return instancia;
   }
   /*metodo que recebe um nome e remove o cliente com esse nome da lista
     * ou retorna null caso o nome nao exista*/
   public boolean excluirCliente(String nomedel){
        Cliente aux = new Cliente();
        aux.setNome(nomedel);
        return this.listaCliente.remove(aux);
        
   }
   /*metodo que recebe um nome e retorna o cliente com esse nome
     * ou null caso nao exista o cliente com esse nome*/
   public Cliente buscaCliente(String nome){
        for(Cliente cliente: this.listaCliente){
            if(cliente.getNome().equals(nome)){
                return cliente;
            }
        }
        return null;
    }
   /*metodo que recebe um cpf e retorna o cliente com esse cpf
     * ou null caso nao exista o cliente com esse cpf*/
   public Cliente buscaCpf(String cpf){
        for(Cliente cliente : this.listaCliente){
            if(cliente.getCpf().compareTo(cpf)==0)
            {
                return cliente;
            }
        }
        return null;
    }
     /**metodo que carrega os dados(clientes) do arquivo no array de clientes*/
    public void lerArquivo(PedidoDAO pedidoDao){
        
        FileReader fileR;
        BufferedReader buff;
        try {        
            fileR = new FileReader("Clientes.txt");
            buff = new BufferedReader(fileR);
            while(buff.ready()){
                Cliente cliente = new Cliente();
                cliente.setNome(buff.readLine());
                cliente.setCpf(buff.readLine());
                cliente.setEndereco(buff.readLine());
                this.listaCliente.add(cliente);
            }
            buff.close();
            fileR.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ClienteDAO.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ClienteDAO.class.getName()).log(Level.SEVERE, null, ex);
        }            
    }
    
    /*metodo que escreve os clientes do array no arquivo txt*/
    public void escreverArquivo(){
       
        try {
        
            FileWriter fw = new FileWriter("Clientes.txt",false);
            PrintWriter saida = new PrintWriter(fw,true);
            for(Cliente cliente : this.listaCliente){
                saida.println(cliente.getNome());
                saida.println(cliente.getCpf());
                saida.println(cliente.getEndereco());
            }    
            
            saida.close();
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
   public ArrayList<Cliente> getListaClientes(){
       return listaCliente;
   }
}